package com.fidelizarte.ejb.persistence.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.Query;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fidelizarte.common.util.SeguridadesException;
import com.fidelizarte.ejb.persistence.dao.factorydao.AbstractDao;
import com.fidelizarte.ejb.persistence.entities.Persona;

@Stateless
public class PersonaDAO extends AbstractDao<Persona> {
	private static final Logger log = LoggerFactory
			.getLogger(PersonaDAO.class);

	/**
	 * Constructor por defecto que inicializa el AbstractDao con la clase
	 * entidad
	 */
	public PersonaDAO() {
		super(Persona.class);
	}
	public Persona getPersonaPorCI(String ci)
			throws SeguridadesException {
		log.info("metodo getPersonaPorCI" );
	
		try {
			Persona personaNula=null;
			Query query = em
					.createQuery("SELECT p FROM Persona p WHERE p.ci= :ci");
			query.setParameter("ci", ci);
			if(query.getResultList()==null) return personaNula;
			else
			return (Persona) query.getResultList().get(0);
		} catch (Exception e) {
			log.info("error al obtenerPorId {}", e.toString());
			throw new SeguridadesException("Error al obtenerPorId" + e);
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<Persona> getEmpleadosPorIdEmpresa(Integer idEmpresa)
			throws SeguridadesException {
		log.info("metodo getEmpleadoPorIdEmpresa" );
	
		try {
			List<Persona> personas=null;
			Query query = em
					.createQuery("SELECT p FROM Persona p  Join p.empresa e WHERE e.idEmpresa= :idEmpresa");
			query.setParameter("idEmpresa", idEmpresa);
			if(query.getResultList()!=null)
				{
				personas= new ArrayList<Persona>();
				 personas= (List<Persona>) query.getResultList();
				 return personas;
				}
			else
			return personas;
		} catch (Exception e) {
			log.info("error al obtenerPersonaPorIdEmpresa {}", e.toString());
			throw new SeguridadesException("Error al obtener la empleado" + e);
		}
	}
}
